/*
 * Copyright 2011-2021 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0.
 * See `LICENSE` in the project root for license information.
 */

package me.ijleex.platform.uploadfile.service;

import java.util.List;

import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import me.ijleex.platform.framework.entity.Result;
import me.ijleex.platform.uploadfile.entity.UploadFile;

/**
 * 上传文件 服务层
 *
 * @author liym
 * @since 2019-10-30 20:48:22 By 'codegen'
 * @since 2019-12-06 10:46 extends {@link WebMvcConfigurer}
 */
public interface IUploadFileService extends WebMvcConfigurer {

    /**
     * 上传文件
     *
     * @param fileContent 文件内容
     * @param originalFilename 原始文件名称
     * @param fileSize 文件大小（Bytes）
     * @param contentType 文件类型，如 image/png、text/plain 等
     * @param user 用户信息
     * @return 结果，包含返回码、图片编号、地址等信息
     * @see #uploadFile(byte[], String, String, long, String, boolean)
     */
    Result uploadFile(byte[] fileContent, String originalFilename, String contentType, long fileSize, String user);

    /**
     * 上传文件，支持加密保存
     *
     * @param fileContent 文件内容
     * @param originalFilename 原始文件名称
     * @param fileSize 文件大小（Bytes）
     * @param contentType 文件类型，如 image/png、text/plain 等
     * @param adminId 管理员ID
     * @param encrypt 是否加密文件
     * @return 结果，包含返回码、图片编号、地址等信息
     * @see #uploadFile(byte[], String, String, long, String)
     * @see #getFileByPath(String)
     * @since 2019-12-06 13:38
     */
    Result uploadFile(byte[] fileContent, String originalFilename, String contentType, long fileSize, String adminId, boolean encrypt);

    /**
     * 删除 上传文件信息
     *
     * @param ids 需要删除的数据ID，如果有多个，请用逗号（,）分隔
     * @return 结果
     */
    int deleteFileByIds(String ids);

    /**
     * 修改 上传文件
     *
     * @param uploadFile 上传文件信息
     * @return 结果
     */
    int updateFile(UploadFile uploadFile);

    /**
     * 查询 上传文件列表
     *
     * @param uploadFile 上传文件信息
     * @return 上传文件集合
     */
    List<UploadFile> getFileList(UploadFile uploadFile);

    /**
     * 查询 上传文件信息
     *
     * @param id 上传文件ID
     * @return 上传文件信息
     */
    UploadFile getFileById(Long id);

    /**
     * 根据上传文件的路径，获取文件内容，如果是加密文件，将解密返回（Base64）
     *
     * @param partPath 本地文件路径，如 /6g/9d/rYarzNMLZYjxxRpwWypzVNbvJ.jpg
     * @return 文件内容，以 Base64 编码，如 Png 图片，返回 {@code "data:image/png;base64,..."}
     * @see #uploadFile(byte[], String, String, long, String, boolean)
     * @since 2019-12-06 10:51
     */
    Result getFileByPath(String partPath);

    /**
     * {@inheritDoc}
     *
     * @param registry 资源注册器
     * @see org.springframework.core.io.DefaultResourceLoader
     * @since 2019-12-06 10:48
     */
    @Override
    void addResourceHandlers(ResourceHandlerRegistry registry);

    /**
     * {@inheritDoc}
     *
     * @param registry 跨域请求注册器
     * @see org.springframework.web.cors.DefaultCorsProcessor
     * @since 2019-12-06 10:49
     */
    @Override
    void addCorsMappings(CorsRegistry registry);

}
